import axios from 'axios';
import { ElMessage } from 'element-plus';
import { useRouter } from 'vue-router';

// 创建路由实例（用于跳转登录页）
const router = useRouter();

const request = axios.create({
    baseURL: 'http://localhost:5000/api', // 后端接口基础路径（必须正确）
    timeout: 10000 // 超时时间
});

// 请求拦截器：自动携带Token
request.interceptors.request.use(
    (config) => {
        const token = localStorage.getItem('token');
        if (token) {
            // 关键：格式必须是 "Bearer + 空格 + token"
            config.headers.Authorization = `Bearer ${token}`;
        }
        return config;
    },
    (error) => {
        // 这里处理"请求还没发出去"的错误（如参数错误）
        ElMessage.error('请求参数错误，请检查');
        return Promise.reject(error);
    }
);

// 响应拦截器：正确区分不同错误类型
request.interceptors.response.use(
    (response) => {
        // 后端返回成功（不管业务码，只处理HTTP 200）
        return response.data;
    },
    (error) => {
        // 处理HTTP错误（重点修复这里）
        if (error.response) {
            // 情况1：后端有响应（状态码不是200）
            const status = error.response.status;
            const errorMsg = error.response.data?.message || '请求失败';

            // 单独处理401（未登录/Token无效）
            if (status === 401) {
                // 清除无效Token
                localStorage.removeItem('token');
                // 提示用户并跳转到登录页
                ElMessage.error('请先登录');
                router.push('/login');
            } else {
                // 其他后端错误（如400参数错、500服务器错）
                ElMessage.error(errorMsg);
            }
        } else {
            // 情况2：后端无响应（真正的网络错误，如服务器没启动、断网）
            ElMessage.error('网络错误，请检查后端是否启动或网络是否通畅');
        }

        return Promise.reject(error);
    }
);

export default request;
